/**
 * 
 */
package com.myBase.core.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.myBase.core.entity.GoldcoinAccountDetail;
import com.myBase.common.persistence.CrudDao;
import com.myBase.common.persistence.annotation.MyBatisDao;

/**
 * 金币账户子表-记录用户某批次金币使用概况DAO接口
 * @author WuJie
 * @version 2017-05-04
 * @注意：update实体的时候请使用 updateGoldcoinAccountDetailbyDetailId，并先对 实体.preUpdate(),因为框架默认主键是id，和表不对应
 */
@MyBatisDao
public interface GoldcoinAccountDetailDao extends CrudDao<GoldcoinAccountDetail> {
    /**
     * getSumGoldCoinByUserAndGoldCoinId(获取指定用户已经获得的某具体金币活动的金币总数) 
     */
    public Integer getSumGoldCoinByUserAndGoldCoinId(@Param("accountId") String accountId,
            @Param("goldCoinPoolId") String goldCoinPoolId);

    /**
     * getSumAvailableGoldCoinByAccountId(获取指定用户所有可用的金币数) 
     */
    public Integer getSumAvailableGoldCoinByAccountId(@Param("accountId") String accountId);

    /**
     * getParamsAvailableGoldCoinByAccountId(获取指定用户所有可用的账户子表记录-即获取金币记录实体list)
     */
    public ArrayList<GoldcoinAccountDetail> getParamsAvailableGoldCoinByAccountId(@Param("accountId") String accountId);

    /**
     * getOverdueBeanListGoldCoinAccountDetail(goldcoinaccount_detail搜索endtime小于等于现在但是金币状体正常的实体列表) 
     */
    public ArrayList<GoldcoinAccountDetail> getOverdueBeanListGoldCoinAccountDetail();

    /**
     * updateGoldcoinAccountDetailbyDetailId(自己写的 update 方法，替代系统自动生成的)
     */
    public int updateGoldcoinAccountDetailbyDetailId(
            @Param("goldcoinAccountDetail") GoldcoinAccountDetail goldcoinAccountDetail);

    public int updateGoldcoinAccountDetailbyDetailIdForStatus(
            @Param("goldcoinAccountDetail") GoldcoinAccountDetail goldcoinAccountDetail,
            @Param("fromDetailStatus") String fromDetailStatus);

    /**
     * getGoldTOBeFailureList(查询即将过期金币流水) 
     * 
     */
    public List<HashMap<String, Object>> getGoldTOBeFailureList(GoldcoinAccountDetail goldAccountDetail);

    /**
     * getGoldTOBeFailureCount(查询即将过期金币 总数) 
     */
    public int getGoldTOBeFailureCount(GoldcoinAccountDetail goldAccountDetail);

    /**
     * getUserGoldSum(查询用户金币可用数量) 
     * 
     */
    public int getUserGoldSum(GoldcoinAccountDetail goldAccountDetail);

    /**
     *getUserGoldTOBeFailureSum(查询用户金币 即将过期数量) 
     */
    public int getUserGoldTOBeFailureSum(GoldcoinAccountDetail goldAccountDetail);

}
